import {
  AlertCircle,
  AlignJustify,
  ArrowDown,
  ArrowLeft,
  ArrowRight,
  ArrowUp,
  Bell,
  Calendar,
  Check,
  ChevronDown,
  ChevronLeft,
  ChevronRight,
  ChevronUp,
  Clock,
  Copy,
  CreditCard,
  Download,
  Edit,
  ExternalLink,
  Eye,
  EyeOff,
  File,
  FileText,
  Filter,
  Heart,
  HeartOff,
  HelpCircle,
  Home,
  Image,
  Info,
  Laptop,
  Loader2,
  Menu,
  MessageSquare,
  Mic,
  Moon,
  MoreHorizontal,
  MoreVertical,
  Music,
  Package,
  Pause,
  Play,
  Plus,
  Radio,
  RefreshCw,
  Search,
  Send,
  Settings,
  Share,
  Shuffle,
  SkipBack,
  SkipForward,
  Slash,
  Star,
  Sun,
  Trash,
  Twitter,
  Upload,
  User,
  UserPlus,
  Users,
  Volume,
  Volume1,
  Volume2,
  VolumeX,
  X,
  type LucideIcon,
  type LightbulbIcon as LucideProps,
} from "lucide-react"

export type Icon = LucideIcon

export const Icons = {
  logo: Music,
  close: X,
  spinner: Loader2,
  chevronLeft: ChevronLeft,
  chevronRight: ChevronRight,
  chevronDown: ChevronDown,
  chevronUp: ChevronUp,
  check: Check,
  menu: Menu,
  moon: Moon,
  sun: Sun,
  laptop: Laptop,
  user: User,
  add: Plus,
  warning: AlertCircle,
  arrowDown: ArrowDown,
  arrowUp: ArrowUp,
  arrowLeft: ArrowLeft,
  arrowRight: ArrowRight,
  help: HelpCircle,
  twitter: Twitter,
  external: ExternalLink,
  trash: Trash,
  star: Star,
  settings: Settings,
  calendar: Calendar,
  copy: Copy,
  copyDone: Check,
  edit: Edit,
  download: Download,
  info: Info,
  share: Share,
  more: MoreHorizontal,
  moreVertical: MoreVertical,
  package: Package,
  users: Users,
  userPlus: UserPlus,
  file: File,
  fileText: FileText,
  clock: Clock,
  search: Search,
  filter: Filter,
  alarm: Bell,
  heart: Heart,
  heartOff: HeartOff,
  home: Home,
  music: Music,
  mic: Mic,
  radio: Radio,
  play: Play,
  pause: Pause,
  skipBack: SkipBack,
  skipForward: SkipForward,
  shuffle: Shuffle,
  volume: Volume,
  volumeLow: Volume1,
  volumeMedium: Volume2,
  volumeMute: VolumeX,
  message: MessageSquare,
  send: Send,
  refresh: RefreshCw,
  image: Image,
  upload: Upload,
  eye: Eye,
  eyeOff: EyeOff,
  creditCard: CreditCard,
  alignJustify: AlignJustify,
  slash: Slash,

  // Add any custom icons here
  gitHub: ({ ...props }: LucideProps) => (
      <svg
          xmlns="http://www.w3.org/2000/svg"
          viewBox="0 0 24 24"
          width="24"
          height="24"
          fill="none"
          stroke="currentColor"
          strokeWidth="2"
          strokeLinecap="round"
          strokeLinejoin="round"
          {...props}
      >
        <path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22" />
      </svg>
  ),

  google: ({ ...props }: LucideProps) => (
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none" {...props}>
        <path
            d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
            fill="#4285F4"
        />
        <path
            d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
            fill="#34A853"
        />
        <path
            d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
            fill="#FBBC05"
        />
        <path
            d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
            fill="#EA4335"
        />
      </svg>
  ),
}

export const PlayIcon = Icons.play

